package org.dromara.tearoom.domain.vo;

import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.tearoom.domain.TerIotDevice;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;



/**
 * IoT设备视图对象 ter_iot_device
 *
 * @author LionLi
 * @date 2025-04-08
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = TerIotDevice.class)
public class TerIotDeviceVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 设备 ID，主键，自增
     */
    @ExcelProperty(value = "设备 ID，主键，自增")
    private Long id;

    /**
     * 设备唯一标识符，全局唯一，用于识别设备
     */
    @ExcelProperty(value = "设备唯一标识符，全局唯一，用于识别设备")
    private String deviceKey;

    /**
     * 设备名称，在产品内唯一，用于标识设备
     */
    @ExcelProperty(value = "设备名称，在产品内唯一，用于标识设备")
    private String deviceName;

    /**
     * 设备备注名称，供用户自定义备注
     */
    @ExcelProperty(value = "设备备注名称，供用户自定义备注")
    private String nickname;

    /**
     * 设备序列号
     */
    @ExcelProperty(value = "设备序列号")
    private String serialNumber;

    /**
     * 设备图片
     */
    @ExcelProperty(value = "设备图片")
    private String picUrl;

    /**
     * 设备图片Url
     */
    @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "picUrl")
    private String picUrlUrl;
    /**
     * 设备分组编号集合
     */
    @ExcelProperty(value = "设备分组编号集合")
    private String groupIds;

    /**
     * 房间 ID
     */
    @ExcelProperty(value = "房间 ID")
    private Long roomId;


    /**
     * 产品 Key
     */
    @ExcelProperty(value = "产品 Key")
    private String productKey;

    /**
     * 设备类型，参见 IotDeviceTypeEnum 枚举
     */
    @ExcelProperty(value = "设备类型，参见 IotDeviceTypeEnum 枚举")
    private Long deviceType;

    /**
     * 设备种类，参见 IotDeviceClassEnum 枚举
     */
    @ExcelProperty(value = "设备种类，参见 IotDeviceClassEnum 枚举")
    private Integer deviceClass;

    /**
     * 网关设备 ID，子设备需要关联的网关设备 ID
     */
    @ExcelProperty(value = "网关设备 ID，子设备需要关联的网关设备 ID")
    private Long gatewayId;

    /**
     * 设备状态，参见 IotDeviceStateEnum 枚举
     */
    @ExcelProperty(value = "设备状态，参见 IotDeviceStateEnum 枚举")
    private Integer state;

    /**
     * 设备合闸状态
     */
    private Integer keyStatus;

    /**
     * 配网锁，0：关闭，1：开启
     */
    private Integer wifiLock;

    /**
     * 锁扣。
     * 0：可手动控制分合闸，异常分闸恢复正常后不会自动合闸；
     * 1：可手动分合闸，异常分闸恢复正常后自动合闸；
     * 2：不可手动控制分合闸，异常情况分闸恢复正常后自动合闸。
     * 异常分闸指：欠压、过压重新上电等异常情况出现的跳闸。
     */
    private Integer keyLock;

    /**
     * 最后上线时间
     */
    @ExcelProperty(value = "最后上线时间")
    private Date onlineTime;

    /**
     * 最后离线时间
     */
    @ExcelProperty(value = "最后离线时间")
    private Date offlineTime;

    /**
     * 设备激活时间
     */
    @ExcelProperty(value = "设备激活时间")
    private Date activeTime;

    /**
     * 设备的 IP 地址
     */
    @ExcelProperty(value = "设备的IP地址")
    private String ip;

    /**
     * 设备的 WIFI名称
     */
    @ExcelProperty(value = "设备的WIFI名称")
    private String ssid;

    /**
     * 设备的固件编号
     */
    @ExcelProperty(value = "设备的固件编号")
    private String firmwareId;

    /**
     * 设备密钥，用于设备认证，需安全存储
     */
    @ExcelProperty(value = "设备密钥，用于设备认证，需安全存储")
    private String deviceSecret;

    /**
     * MQTT 客户端 ID
     */
    @ExcelProperty(value = "MQTT 客户端 ID")
    private String mqttClientId;

    /**
     * MQTT 用户名
     */
    @ExcelProperty(value = "MQTT 用户名")
    private String mqttUsername;

    /**
     * MQTT 密码
     */
    @ExcelProperty(value = "MQTT 密码")
    private String mqttPassword;

    /**
     * 订阅主题
     */
    private String mqttSubscribe;
    /**
     * 发布主题
     */
    private String mqttPublish;

    /**
     * 认证类型（如一机一密、动态注册）
     */
    @ExcelProperty(value = "认证类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "如=一机一密、动态注册")
    private String authType;

    /**
     * 设备位置的纬度
     */
    @ExcelProperty(value = "设备位置的纬度")
    private Long latitude;

    /**
     * 设备位置的经度
     */
    @ExcelProperty(value = "设备位置的经度")
    private Long longitude;

    /**
     * 地区编码
     */
    @ExcelProperty(value = "地区编码")
    private Long areaId;

    /**
     * 设备详细地址
     */
    @ExcelProperty(value = "设备详细地址")
    private String address;

    /**
     * 设备配置，JSON 格式
     */
    @ExcelProperty(value = "设备配置，JSON 格式")
    private String config;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;


}
